package pos.presentacion;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;

import java.util.List;

import pos.dominio.GestorEventos;
import pos.dominio.GestorPlanetas;
import pos.dominio.Jugador;
import pos.dominio.Nave;
import pos.dominio.Planeta;
import pos.dominio.ResultadoFase;

public class Fase3y4 {

	public static ResultadoFase desarrolloFase3(ResultadoFase result) throws IOException{
		
		Jugador jg=result.getJugador();
		Nave n=result.getNave();
		GestorEventos ge=result.getGe();
		GestorPlanetas gp =result.getGp();
		List listaPlanetasAdyacentes=gp.recogerPlanetasAdyacente();
		//Hay suficiente vectoriun???si palante no! fin de la fase 
		if(jg.getCuentaVectorium()>=1  && !listaPlanetasAdyacentes.isEmpty()){
			System.out.print("Los planetas disponibles son:\n");
			//miramos planetas adyacentes que se pueden viajar Comparando con la potencia de los motores con la distancia
			for (Iterator<Planeta> iter = listaPlanetasAdyacentes.iterator(); iter.hasNext();) {
				Planeta p = (Planeta) iter.next();
			
				if(p.getDistancia()<=n.getPotenciaMotores()){
				//mostramos opciones 1,2,3,4...sino hay opciones fin de la fase
				System.out.print(gp.toString(p));	
				}
			}
		
			//Escogemos
			String respuesta;
			Planeta plaAct= new Planeta();
			Integer[]coord=new Integer[2];
			System.out.print("Dime a que planeta quieres ir por su nombre exacto\n");
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			respuesta=br.readLine();
				//BUSCAMOS LA RESPUESTA EN "GALAXIA"
				
			boolean encontrado=false;
			for(int i=gp.getCoordActuales()[0]-1;i<=gp.getCoordActuales()[0]+1;i++){
				for(int j=gp.getCoordActuales()[0]-1;j<=gp.getCoordActuales()[0]+1;j++){
					Planeta[][] ga=gp.getGalaxia();
					if(ga[i][j].getNombrePlaneta().compareTo(respuesta)==0){
						encontrado=true;
						plaAct=ga[i][j];
						coord[0]=i;
						coord[1]=j;
						//restamos el vectorium
						jg.setCuentaVectorium(jg.getCuentaVectorium()-1);
						
						//planeta_actual Actualizarlo y las coordenadasActuals 
						gp.setPlanetaActual(plaAct);
						gp.setCoordActuales(coord);
					}
					
				}
			}
			
		
			}else if(listaPlanetasAdyacentes.isEmpty()){
			System.out.print("No puedes cambiar de planeta pues estan demasiados lejos...");
			
			}else{
				System.out.print("No puedes cambiar de planeta");
			}
		ResultadoFase res=new ResultadoFase(n,jg,ge,gp);
		return res;
	}

}
